{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c5d99631-fe43-44af-b13d-a32e39f252c3",
   "metadata": {},
   "source": [
    "# Pandasf分箱操作"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6cdc56d9-3f45-4cf8-99a5-c2580a927a3f",
   "metadata": {},
   "source": [
    "- 分箱操作就是将连续型数据离散化\n",
    "- 分箱操作分为等距分箱与等频分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "060d8de8-c8f4-4d14-81b4-702a10ba796f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f1338172-9c87-4915-ab4f-ee372d651692",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Pandas</th>\n",
       "      <th>NumPy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>72</td>\n",
       "      <td>67</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>21</td>\n",
       "      <td>62</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>54</td>\n",
       "      <td>23</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>20</td>\n",
       "      <td>98</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>68</td>\n",
       "      <td>20</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Pandas  NumPy\n",
       "0      72      67     58\n",
       "1      21      62     12\n",
       "2      54      23     76\n",
       "3      20      98     48\n",
       "4      68      20     85"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = np.random.randint(0,100,size=(5,3))\n",
    "df= pd.DataFrame(data=data,columns=['Python','Pandas','NumPy'])\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2839b0ad-bce7-4c6b-be3e-74b7e1e238f0",
   "metadata": {},
   "source": [
    "**1、等宽分箱**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "53f3586b-1f34-4ae3-80d0-7cb3b2882361",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    72\n",
       "1    21\n",
       "2    54\n",
       "3    20\n",
       "4    68\n",
       "Name: Python, dtype: int32"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1a92d221-5c6d-48aa-9115-1a0a30906a7f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      (59.0, 72.0]\n",
       "1    (19.948, 33.0]\n",
       "2      (46.0, 59.0]\n",
       "3    (19.948, 33.0]\n",
       "4      (59.0, 72.0]\n",
       "Name: Python, dtype: category\n",
       "Categories (4, interval[float64, right]): [(19.948, 33.0] < (33.0, 46.0] < (46.0, 59.0] < (59.0, 72.0]]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# bins分组数量\n",
    "s = pd.cut(df.Python,bins=4)\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7e03ee0a-5c97-4d63-8c40-6463d87fc0d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python\n",
       "(19.948, 33.0]    2\n",
       "(59.0, 72.0]      2\n",
       "(46.0, 59.0]      1\n",
       "(33.0, 46.0]      0\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d0c7bebc-86d7-44a6-bf92-c8beb6e7ed71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='Python'>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zz1n6xMfH685c+Zo4cKF2r9/v0aNGqWCggLbU0MAAKBqc/iW0Pbt2/XAAw/Y5uPj4yVJQ4YM0YIFC5SdnW0LL5IUGhqqL774Qs8995xmzZqlBg0aaO7cubZHmiVp4MCBOn36tCZNmqScnBy1b99eycnJNwzEBQAAVZPDgaV79+4yDOOm7SW9xbZ79+76/vvvb7ndMWPGaMyYMY6WAwAAqgCXfEoIAABULQQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgeqUKLLNnz1bjxo3l6empiIgIpaen37Rv9+7dZbFYbpj69Olj6zN06NAb2nv16lWa0gAAQCVUzdEVli1bpvj4eCUlJSkiIkIzZ85UdHS0Dhw4IH9//xv6r1q1SlevXrXNnz17Vu3atdOAAQPs+vXq1Uvz58+3zXt4eDhaGgAAqKQcvsIyY8YMjRw5UsOGDVNYWJiSkpLk7e2tefPmldjf19dXgYGBtmnDhg3y9va+IbB4eHjY9atTp07p9ggAAFQ6DgWWq1evaseOHYqKivr3BqxWRUVFKS0t7ba28cEHH2jQoEGqUaOG3fJNmzbJ399fzZs316hRo3T27NmbbqOwsFD5+fl2EwAAqLwcCixnzpxRUVGRAgIC7JYHBAQoJyfnN9dPT0/X3r17NWLECLvlvXr10qJFi5SSkqJp06bpm2++UUxMjIqKikrcTmJionx8fGxTSEiII7sBAABcjMNjWP4bH3zwgdq0aaMuXbrYLR80aJDt39u0aaO2bdvqzjvv1KZNm/TQQw/dsJ2EhATFx8fb5vPz8wktAABUYg5dYalXr57c3NyUm5trtzw3N1eBgYG3XLegoEBLly7V8OHDf/PnNGnSRPXq1dOhQ4dKbPfw8FCtWrXsJgAAUHk5FFjc3d0VHh6ulJQU27Li4mKlpKQoMjLyluuuWLFChYWFeuyxx37z55w4cUJnz55VUFCQI+UBAIBKyuGnhOLj4zVnzhwtXLhQ+/fv16hRo1RQUKBhw4ZJkuLi4pSQkHDDeh988IFiY2NVt25du+UXL17UuHHjtGXLFh09elQpKSnq16+fmjZtqujo6FLuFgAAqEwcHsMycOBAnT59WpMmTVJOTo7at2+v5ORk20DczMxMWa32OejAgQNKTU3V+vXrb9iem5ub9uzZo4ULF+r8+fMKDg5Wz5499corr/AuFgAAIKmUg27HjBmjMWPGlNi2adOmG5Y1b95chmGU2N/Ly0vr1q0rTRkAAKCK4FtCAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9AgsAADA9EoVWGbPnq3GjRvL09NTERERSk9Pv2nfBQsWyGKx2E2enp52fQzD0KRJkxQUFCQvLy9FRUXp4MGDpSkNAABUQg4HlmXLlik+Pl6TJ0/Wzp071a5dO0VHR+vUqVM3XadWrVrKzs62TceOHbNrnz59ut566y0lJSVp69atqlGjhqKjo3XlyhXH9wgAAFQ6DgeWGTNmaOTIkRo2bJjCwsKUlJQkb29vzZs376brWCwWBQYG2qaAgABbm2EYmjlzpl588UX169dPbdu21aJFi5SVlaXVq1eXaqcAAEDl4lBguXr1qnbs2KGoqKh/b8BqVVRUlNLS0m663sWLF9WoUSOFhISoX79++uGHH2xtGRkZysnJsdumj4+PIiIibrrNwsJC5efn200AAKDyciiwnDlzRkVFRXZXSCQpICBAOTk5Ja7TvHlzzZs3T59++qk++ugjFRcXq2vXrjpx4oQk2dZzZJuJiYny8fGxTSEhIY7sBgAAcDHl/pRQZGSk4uLi1L59e91///1atWqV/Pz89N5775V6mwkJCcrLy7NNx48fL8OKAQCA2TgUWOrVqyc3Nzfl5ubaLc/NzVVgYOBtbaN69erq0KGDDh06JEm29RzZpoeHh2rVqmU3AQCAysuhwOLu7q7w8HClpKTYlhUXFyslJUWRkZG3tY2ioiL961//UlBQkCQpNDRUgYGBdtvMz8/X1q1bb3ubAACgcqvm6Arx8fEaMmSIOnXqpC5dumjmzJkqKCjQsGHDJElxcXGqX7++EhMTJUkvv/yy7r77bjVt2lTnz5/X3//+dx07dkwjRoyQ9MsTRM8++6xeffVVNWvWTKGhoZo4caKCg4MVGxtbdnsKAABclsOBZeDAgTp9+rQmTZqknJwctW/fXsnJybZBs5mZmbJa/33h5ty5cxo5cqRycnJUp04dhYeH67vvvlNYWJitz/jx41VQUKAnnnhC58+f17333qvk5OQbXjAHAACqJothGIazi/hv5efny8fHR3l5eU4Zz9J4whcV/jPN4OjUPs4uwSk43lULxxsoP478/uZbQgAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPQILAAAwPRKFVhmz56txo0by9PTUxEREUpPT79p3zlz5ui+++5TnTp1VKdOHUVFRd3Qf+jQobJYLHZTr169SlMaAACohBwOLMuWLVN8fLwmT56snTt3ql27doqOjtapU6dK7L9p0yYNHjxYX3/9tdLS0hQSEqKePXvq5MmTdv169eql7Oxs2/Txxx+Xbo8AAECl43BgmTFjhkaOHKlhw4YpLCxMSUlJ8vb21rx580rsv3jxYj399NNq3769WrRooblz56q4uFgpKSl2/Tw8PBQYGGib6tSpU7o9AgAAlY5DgeXq1avasWOHoqKi/r0Bq1VRUVFKS0u7rW1cunRJ165dk6+vr93yTZs2yd/fX82bN9eoUaN09uzZm26jsLBQ+fn5dhMAAKi8HAosZ86cUVFRkQICAuyWBwQEKCcn57a28de//lXBwcF2oadXr15atGiRUlJSNG3aNH3zzTeKiYlRUVFRidtITEyUj4+PbQoJCXFkNwAAgIupVpE/bOrUqVq6dKk2bdokT09P2/JBgwbZ/r1NmzZq27at7rzzTm3atEkP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j4+PDh8+rKSkJBUVFWnUqFGKjY3Va6+95uxSTYXA4kKys7O1Zs0aFRYW6sEHH+T7QZWY1WpVTk6O/P39FRERof79+2vcuHG29nfffVdz5szRzp07nVglysqvT3/9J+P/f4Xd4GvslUrDhg21cOFCPfDAA8rKylKDBg302Wef6Xe/+52kXz7L8fzzz+vHH390cqXmQmABTMhqtSo3N9d222/jxo1q166drf3w4cPq0KEDl40rCb7GXrV4enrq4MGDCgkJkSTVqFFD33//ve1VBceOHVNYWJjdu1rAY82VRnZ2tq5du8ZgrUokOTlZPj4+8vT01KVLl+zarly5IovF4qTKUNb27Nmj4cOH65VXXrH7GrvFYlGXLl24mlrJ1K1bV6dPn7YFln79+ql27dq29osXL8rDw8NJ1ZkXg24riQcffND2tzBUDkOGDFFsbKxOnjypr776yq5ty5YtuvPOO51UGcoaX2OvWtq2batt27bZ5pcsWSJ/f3/b/LZt22wvlcO/cUuokti2bZsuXbrEJeMqYs2aNapevbqio6OdXQrK2L59+/Too48qLCxMK1as0O7du7nCUsn8/PPPslqtdldV/q8vv/xSXl5e6t69e4XWZXYEFgAwmatXr2rChAn6+uuvtWrVKq6eAiKwuKTMzEzbxw+bNGmiunXrOrsklKHMzEyHxiKdPHnSNuYBgLlxfpceY1hcyDvvvKNGjRopNDRUXbt21d133y1/f3/de++92rFjh7PLQxnp3LmznnzySbt73P8pLy9Pc+bMUevWrW0fxIRryszMdKj/yZMny6kSVATO79LjKSEX8frrr+vNN99UQkKCPD09NWPGDA0ePFidO3fWkiVL1K1bN33zzTfq1KmTs0vFf2nfvn167bXX1KNHD3l6eio8PFzBwcHy9PTUuXPntG/fPv3www/q2LGjpk+frt69ezu7ZPwXOnfurNjYWI0YMUKdO3cusU9eXp6WL1+uWbNm6YknntAzzzxTwVWirHB+lx63hFxEaGio3nnnHcXExEiSfvrpJ3Xt2lU5OTmqVq2axo4dq/3792v9+vVOrhRl5fLly/riiy+UmpqqY8eO6fLly6pXr546dOig6OhotW7d2tklogycPXtWr732mubNm/ebv8AmTpzIL7BKgvPbcQQWF1GjRg398MMPaty4saRfXirl7u6uzMxMBQUFaffu3br33nt14cIF5xYKoFT4BQbcGreEXMRdd92lDRs2aOTIkZKkr7/+Wu7u7goMDJT0y5sTeZEY4Lq8vLzUv39/9e/f39mlAKZEYHERCQkJeuyxx7Rx40Z5enpq1apVeuaZZ2whZdOmTfwNDABQaXFLyIV8+eWX+uijj1RYWKjo6Gjb1Rbpl/vgknjEGQBQKRFYAACA6fEelkri+vXrDr/PAQAAV0FgqSR++OEHXt8NAKi0CCwAAMD0eErIRXTs2PGW7ZcvX66gSgAAqHgEFhexb98+DRo06Ka3fbKzs/XTTz9VcFUAAFQMAouLaN26tSIiIjRq1KgS23ft2qU5c+ZUcFUAAFQMxrC4iHvuuUcHDhy4aXvNmjXVrVu3CqwIAICKw3tYAACA6XGFBQAAmB6BxQU4+kK4kydPllMlAAA4B4HFBXTu3FlPPvmktm3bdtM+eXl5mjNnjlq3bq2VK1dWYHUAAJQ/nhJyAfv27dNrr72mHj16yNPTU+Hh4QoODpanp6fOnTunffv26YcfflDHjh01ffp09e7d29klAwBQphh060IuX76sL774QqmpqTp27JguX76sevXqqUOHDoqOjlbr1q2dXSIAAOWCwAIAAEyPMSwAAMD0CCwAAMD0CCwAAMD0CCwAAMD0CCwAAMD0CCwATG3o0KGKjY11dhkAnIzAAqDMDB06VBaLRRaLRe7u7mratKlefvllXb9+/TfXPXr0qCwWi3bt2lX+hQJwObzpFkCZ6tWrl+bPn6/CwkKtXbtWo0ePVvXq1ZWQkODs0gC4MK6wAChTHh4eCgwMVKNGjTRq1ChFRUVp+fLlqlWrlv7xj3/Y9V29erVq1KihCxcuKDQ0VJLUoUMHWSwWde/e3a7v66+/rqCgINWtW1ejR4/WtWvXbG3nzp1TXFyc6tSpI29vb8XExOjgwYO29gULFqh27dpat26dWrZsqTvuuEO9evVSdnZ2+f2HAFCmCCwAypWXl5esVqsGDRqk+fPn27XNnz9f/fv3V82aNZWeni5J2rhxo7Kzs7Vq1Spbv6+//lqHDx/W119/rYULF2rBggVasGCBrX3o0KHavn27PvvsM6WlpckwDPXu3dsu1Fy6dEmvv/66PvzwQ23evFmZmZl64YUXynfnAZQZAguAcmEYhjZu3Kh169bpwQcf1IgRI7Ru3TrbVY1Tp05p7dq1+vOf/yxJ8vPzkyTVrVtXgYGB8vX1tW2rTp06evvtt9WiRQv97ne/U58+fZSSkiJJOnjwoD777DPNnTtX9913n9q1a6fFixfr5MmTWr16tW0b165dU1JSkjp16qSOHTtqzJgxtm0AMD8CC4AytWbNGt1xxx3y9PRUTEyMBg4cqJdeekldunRRq1attHDhQknSRx99pEaNGqlbt26/uc1WrVrJzc3NNh8UFKRTp05Jkvbv369q1aopIiLC1l63bl01b95c+/fvty3z9vbWnXfeWeI2AJgfgQVAmXrggQe0a9cuHTx4UJcvX9bChQtVo0YNSdKIESNst3Lmz5+vYcOGyWKx/OY2q1evbjdvsVhUXFzsUF0lbYNvvwKug8ACoEzVqFFDTZs2VcOGDVWtmv2DiI899piOHTumt956S/v27dOQIUNsbe7u7pKkoqIih35ey5Ytdf36dW3dutW27OzZszpw4IDCwsL+iz0BYCYEFgAVpk6dOvrDH/6gcePGqWfPnmrQoIGtzd/fX15eXkpOTlZubq7y8vJua5vNmjVTv379NHLkSKWmpmr37t167LHHVL9+ffXr16+8dgVABSOwAKhQw4cP19WrV22DbX9VrVo1vfXWW3rvvfcUHBzsUNiYP3++wsPD9bvf/U6RkZEyDENr16694TYQANdlMbiJC6ACffjhh3ruueeUlZVluw0EAL+FN90CqBCXLl1Sdna2pk6dqieffJKwAsAh3BICUCGmT5+uFi1aKDAwkNf0A3AYt4QAAIDpcYUFAACYHoEFAACYHoEFAACYHoEFAACYHoEFAACYHoEFAACYHoEFAACYHoEFAACY3v8D8VtLHJRzaZcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "s.value_counts().plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "b51643db-f63e-462b-a284-fafb8524a3bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    C\n",
       "1    A\n",
       "2    B\n",
       "3    A\n",
       "4    C\n",
       "Name: Python, dtype: category\n",
       "Categories (4, object): ['A' < 'B' < 'C' < 'D']"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.cut(df.Python,#分箱数据\n",
    "       bins=[0,30,60,80,100],#分箱的断点\n",
    "      right=False,# 左闭右开 默认左开右闭\n",
    "      labels=['A','B','C','D']#分箱后的分类的标签\n",
    "      )\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04c9c767-431d-4537-a791-e9c07311f3f0",
   "metadata": {},
   "source": [
    "**等频分箱**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "61007589-b2c8-4540-a327-c3579592d123",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    D\n",
       "1    A\n",
       "2    B\n",
       "3    A\n",
       "4    C\n",
       "Name: Python, dtype: category\n",
       "Categories (4, object): ['A' < 'B' < 'C' < 'D']"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.qcut(df.Python,#分箱数据\n",
    "      q=4,# 分成4等分\n",
    "      labels=['A','B','C','D']#分箱后的分类的标签\n",
    "      )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
